package cn.lg.soar.database.base.entity;

import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;

/**
 * 树形数据，使用左右值实现
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface INumberTreeEntity<ID extends Serializable> extends ITreeEntity<ID> {

    String LEFT_NO = "left_no";
    String RIGHT_NO = "right_no";

    /**
     * 获取左值
     * @return
     */
    Integer getLeftNo();

    /**
     * 设置左值
     * @param leftNo
     */
    void setLeftNo(Integer leftNo);

    /**
     * 获取右值
     * @return
     */
    Integer getRightNo();

    /**
     * 设置右值
     * @param rightNo
     */
    void setRightNo(Integer rightNo);

    /**
     * 后代数量（为0是叶子节点）
     * @return
     */
    @ApiModelProperty(value = "后代数量（为0是叶子节点）")
    default Integer getDescendantQuantity() {
        Integer leftNo = getLeftNo();
        Integer rightNo = getRightNo();
        if (leftNo == null || rightNo == null) {
            return null;
        }
        return (rightNo - leftNo - 1) >> 1;
    }

}
